package com.ruoyi.system.controller;

import cn.hutool.core.lang.hash.Hash;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.ArchiveTypeInfo;
import com.ruoyi.system.service.ArchiveTypeInfoService;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

import java.util.*;
import java.util.stream.Collectors;

/**
 * 档案类型基础信息Controller
 * 处理档案类型的增删改查请求
 *
 * @author admin
 * @date 2025-08-24
 */
@RestController
@RequestMapping("/system/archiveType")
public class ArchiveTypeInfoController extends BaseController {
    @Autowired
    private ArchiveTypeInfoService archiveTypeInfoService;

    /**
     * 1. 查询档案类型基础信息列表（分页）
     * 请求方式：GET
     * 请求参数：archiveTypeInfo（含分页参数pageNum、pageSize）
     * 返回结果：分页表格数据（total + rows）
     */
    @GetMapping("/list")
    public AjaxResult list(ArchiveTypeInfo archiveTypeInfo) {
        List<ArchiveTypeInfo> list = archiveTypeInfoService.selectArchiveTypeInfoList(archiveTypeInfo);
        Set<String> names = new HashSet<>();
        if(list != null && list.size() > 0)
        {
            names = list.stream().map(m -> m.getName()).collect(Collectors.toSet());
        }
        Map<String,Object> map = new HashMap<>();
        map.put("seriesData",list);
        map.put("xData",names);
        return AjaxResult.success(map); // 封装分页结果
    }

    /**
     * 2. 查询档案类型基础信息详情（单条）
     * 请求方式：GET
     * 请求参数：id（路径参数）
     * 返回结果：单条档案类型数据
     */
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") Long id) {
        return AjaxResult.success(archiveTypeInfoService.selectArchiveTypeInfoById(id));
    }

    /**
     * 3. 新增档案类型基础信息
     * 请求方式：POST
     * 请求参数：archiveTypeInfo（JSON格式）
     * 返回结果：新增结果（成功/失败）
     */
    @PostMapping
    public AjaxResult add(@RequestBody ArchiveTypeInfo archiveTypeInfo) {
        // 可添加业务校验（如档案类型名称唯一性）
        if (archiveTypeInfoService.selectListByName(archiveTypeInfo).size() > 0) {
            return AjaxResult.error("该档案类型已存在，请勿重复添加");
        }
        return toAjax(archiveTypeInfoService.insertArchiveTypeInfo(archiveTypeInfo));
    }

    /**
     * 3. 批量新增档案类型基础信息
     * 请求方式：POST
     * 请求参数：List&lt;ArchiveTypeInfo&gt;（JSON数组格式）
     * 返回结果：新增结果（成功/失败）
     */
    @PostMapping("/saveBatch")
    public AjaxResult batchAdd(@RequestBody List<ArchiveTypeInfo> archiveTypeList) {
        // 参数校验
        if (CollectionUtils.isEmpty(archiveTypeList)) {
            return AjaxResult.error("批量新增数据不能为空");
        }

        //保存之前先删除其他所有数据
        archiveTypeInfoService.deleteArchiveTypeInfo();
        // 批量保存
        return toAjax(archiveTypeInfoService.batchInsertArchiveTypeInfo(archiveTypeList));
    }


    /**
     * 4. 修改档案类型基础信息
     * 请求方式：PUT
     * 请求参数：archiveTypeInfo（JSON格式，含id）
     * 返回结果：修改结果（成功/失败）
     */
    @PutMapping
    public AjaxResult edit(@RequestBody ArchiveTypeInfo archiveTypeInfo) {
        return toAjax(archiveTypeInfoService.updateArchiveTypeInfo(archiveTypeInfo));
    }

    /**
     * 5. 删除档案类型基础信息（单条/批量）
     * 请求方式：DELETE
     * 请求参数：ids（路径参数，多个id用逗号分隔）
     * 返回结果：删除结果（成功/失败）
     */
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable Long[] ids) {
        return toAjax(archiveTypeInfoService.deleteArchiveTypeInfoByIds(ids));
    }
}